Generally speaking, a shared computing environment can include hardware and software infrastructure configured to form an organization comprised of multiple distributed computing resources, which computing resources can be shared among the different users in the network. The computing resources may even be located in geographically disperse locations. In a traditional, computing environment or network where computing resources are not shared, an application is generally provided with a dedicated set of computing resources for running that particular application. In a shared and distributed computing environment (hereinafter generally referred to as shared computing environment), the distributed computing resources may be shared among different applications and this leads to several advantages. For example, such resource sharing can lead to increases in the utilization of particular computing resources, and accordingly, to a reduction in capital and operational expenditures. Resource sharing can also lead to improvements in fault tolerance for the application(s).
In the context of the present disclosure, software applications or software systems (generally referred to hereinafter as applications), generally comprise a set of potentially heterogeneous independent software components, each software component capable of running on a separate computing resource or device in the shared computing environment. Examples of such applications can include Java 2 Platform Enterprise Edition (J2EE) applications; client server applications; web server-based applications; file transfer protocol (FTP) services; Message-Oriented-Middleware (MoM) based applications; computational workload based applications, workload based application systems (such as Platform Load Sharing Facility™ (LSF) and Platform Symphony™, where the whole system is made up of a master node and a number of compute nodes); and executable programs. The applications are composed of a set of independent software components (referred to hereinafter as application components), each of which application components is capable of being run or hosted on a separate distributed computing device or resource, within a shared computing environment.
In order to be able to run an application, certain computing resources must be made available from the shared computing environment to host the application components of such application. In this context, computing resources (hereinafter generally referred to as resources) can encompass any types of computing resources within the shared computing environment that might be required in order for an application to be run, including hardware (such as servers, memory, central processing unit (CPU) time, mainframe computers, networks, network storage, scientific instruments, and other computing devices), as well as software, databases, software licenses, available network services and other non-hardware resources. Other possible examples of resources could include virtual machines (VM) managed by hypervisors and virtual private servers (VPS) supported by OS virtualization technologies. In a shared computing environment, the resources are generally available to be shared among the various applications that are run on the shared computing environment.
Prior art systems are known which attempt to address similar types of problems as described herein, such as how to share distributed resources, how to improve availability of applications and how to make on-demand adjustments of resources. However, the majority of these systems manage a specific type of application server all of which are running a specific type of application; such systems do not adopt a generic approach that will enable them to manage different types of distributed (heterogeneous) applications. Other systems purport to decouple the hardware and software for servers through the use of bare-metal machines and a mechanism to image/repurpose such machines; this involves a machine-centric approach rather than an application-centric approach to tackle the problems.